home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / unix / volume21 / berkeley_yacc / part03 < prev    next >
Encoding:
Internet Message Format  |  1990-04-05  |  45.9 KB

  1. Subject:  v21i080:  Public domain Berkeley YACC, Part03/05
  2. Newsgroups: comp.sources.unix
  3. Approved: rsalz@uunet.UU.NET
  4. X-Checksum-Snefru: 41ecc78f 5be985f0 530d69c5 0562358a
  5.  
  6. Submitted-by: Robert Corbett <corbett@ernie.berkeley.edu>
  7. Posting-number: Volume 21, Issue 80
  8. Archive-name: berkeley_yacc/part03
  9.  
  10. #! /bin/sh
  11. # This is a shell archive.  Remove anything before this line, then unpack
  12. # it by saving it into a file and typing "sh file".  To overwrite existing
  13. # files, type "sh file -c".  You can also feed this as standard input via
  14. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  15. # will see the following message at the end:
  16. #        "End of archive 3 (of 5)."
  17. # Contents:  output.c test/ftp.output
  18. # Wrapped by rsalz@litchi.bbn.com on Mon Apr  2 11:43:43 1990
  19. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  20. if test -f 'output.c' -a "${1}" != "-c" ; then 
  21.   echo shar: Will not clobber existing file \"'output.c'\"
  22. else
  23. echo shar: Extracting \"'output.c'\" \(20075 characters\)
  24. sed "s/^X//" >'output.c' <<'END_OF_FILE'
  25. X#include "defs.h"
  26. X
  27. Xstatic int nvectors;
  28. Xstatic int nentries;
  29. Xstatic short **froms;
  30. Xstatic short **tos;
  31. Xstatic short *tally;
  32. Xstatic short *width;
  33. Xstatic short *state_count;
  34. Xstatic short *order;
  35. Xstatic short *base;
  36. Xstatic short *pos;
  37. Xstatic int maxtable;
  38. Xstatic short *table;
  39. Xstatic short *check;
  40. Xstatic int lowzero;
  41. Xstatic int high;
  42. X
  43. X
  44. Xoutput()
  45. X{
  46. X    free_itemsets();
  47. X    free_shifts();
  48. X    free_reductions();
  49. X    output_stored_text();
  50. X    output_defines();
  51. X    output_rule_data();
  52. X    output_yydefred();
  53. X    output_actions();
  54. X    free_parser();
  55. X    output_debug();
  56. X    output_stype();
  57. X    write_section(header);
  58. X    output_trailing_text();
  59. X    write_section(body);
  60. X    output_semantic_actions();
  61. X    write_section(trailer);
  62. X}
  63. X
  64. X
  65. Xoutput_rule_data()
  66. X{
  67. X    register int i;
  68. X    register int j;
  69. X
  70. X  
  71. X    fprintf(output_file, "short yylhs[] = {%42d,",
  72. X        symbol_value[start_symbol]);
  73. X
  74. X    j = 10;
  75. X    for (i = 3; i < nrules; i++)
  76. X    {
  77. X    if (j >= 10)
  78. X    {
  79. X        ++outline;
  80. X        putc('\n', output_file);
  81. X        j = 1;
  82. X    }
  83. X        else
  84. X        ++j;
  85. X
  86. X        fprintf(output_file, "%5d,", symbol_value[rlhs[i]]);
  87. X    }
  88. X    outline += 2;
  89. X    fprintf(output_file, "\n};\n");
  90. X
  91. X    fprintf(output_file, "short yylen[] = {%42d,", 2);
  92. X
  93. X    j = 10;
  94. X    for (i = 3; i < nrules; i++)
  95. X    {
  96. X    if (j >= 10)
  97. X    {
  98. X        ++outline;
  99. X        putc('\n', output_file);
  100. X        j = 1;
  101. X    }
  102. X    else
  103. X      j++;
  104. X
  105. X        fprintf(output_file, "%5d,", rrhs[i + 1] - rrhs[i] - 1);
  106. X    }
  107. X    outline += 2;
  108. X    fprintf(output_file, "\n};\n");
  109. X}
  110. X
  111. X
  112. Xoutput_yydefred()
  113. X{
  114. X    register int i, j;
  115. X
  116. X    fprintf(output_file, "short yydefred[] = {%39d,",
  117. X        (defred[0] ? defred[0] - 2 : 0));
  118. X
  119. X    j = 10;
  120. X    for (i = 1; i < nstates; i++)
  121. X    {
  122. X    if (j < 10)
  123. X        ++j;
  124. X    else
  125. X    {
  126. X        ++outline;
  127. X        putc('\n', output_file);
  128. X        j = 1;
  129. X    }
  130. X
  131. X    fprintf(output_file, "%5d,", (defred[i] ? defred[i] - 2 : 0));
  132. X    }
  133. X
  134. X    outline += 2;
  135. X    fprintf(output_file, "\n};\n");
  136. X}
  137. X
  138. X
  139. Xoutput_actions()
  140. X{
  141. X    nvectors = 2*nstates + nvars;
  142. X
  143. X    froms = NEW2(nvectors, short *);
  144. X    tos = NEW2(nvectors, short *);
  145. X    tally = NEW2(nvectors, short);
  146. X    width = NEW2(nvectors, short);
  147. X
  148. X    token_actions();
  149. X    FREE(lookaheads);
  150. X    FREE(LA);
  151. X    FREE(LAruleno);
  152. X    FREE(accessing_symbol);
  153. X
  154. X    goto_actions();
  155. X    FREE(goto_map + ntokens);
  156. X    FREE(from_state);
  157. X    FREE(to_state);
  158. X
  159. X    sort_actions();
  160. X    pack_table();
  161. X    output_base();
  162. X    output_table();
  163. X    output_check();
  164. X}
  165. X
  166. X
  167. Xtoken_actions()
  168. X{
  169. X    register int i, j;
  170. X    register int shiftcount, reducecount;
  171. X    register int max, min;
  172. X    register short *actionrow, *r, *s;
  173. X    register action *p;
  174. X
  175. X    actionrow = NEW2(2*ntokens, short);
  176. X    for (i = 0; i < nstates; ++i)
  177. X    {
  178. X    if (parser[i])
  179. X    {
  180. X        for (j = 0; j < 2*ntokens; ++j)
  181. X        actionrow[j] = 0;
  182. X
  183. X        shiftcount = 0;
  184. X        reducecount = 0;
  185. X        for (p = parser[i]; p; p = p->next)
  186. X        {
  187. X        if (p->suppressed == 0)
  188. X        {
  189. X            if (p->action_code == SHIFT)
  190. X            {
  191. X            ++shiftcount;
  192. X            actionrow[p->symbol] = p->number;
  193. X            }
  194. X            else if (p->action_code == REDUCE && p->number != defred[i])
  195. X            {
  196. X            ++reducecount;
  197. X            actionrow[p->symbol + ntokens] = p->number;
  198. X            }
  199. X        }
  200. X        }
  201. X
  202. X        tally[i] = shiftcount;
  203. X        tally[nstates+i] = reducecount;
  204. X        width[i] = 0;
  205. X        width[nstates+i] = 0;
  206. X        if (shiftcount > 0)
  207. X        {
  208. X        froms[i] = r = NEW2(shiftcount, short);
  209. X        tos[i] = s = NEW2(shiftcount, short);
  210. X        min = MAXSHORT;
  211. X        max = 0;
  212. X        for (j = 0; j < ntokens; ++j)
  213. X        {
  214. X            if (actionrow[j])
  215. X            {
  216. X            if (min > symbol_value[j])
  217. X                min = symbol_value[j];
  218. X            if (max < symbol_value[j])
  219. X                max = symbol_value[j];
  220. X            *r++ = symbol_value[j];
  221. X            *s++ = actionrow[j];
  222. X            }
  223. X        }
  224. X        width[i] = max - min + 1;
  225. X        }
  226. X        if (reducecount > 0)
  227. X        {
  228. X        froms[nstates+i] = r = NEW2(reducecount, short);
  229. X        tos[nstates+i] = s = NEW2(reducecount, short);
  230. X        min = MAXSHORT;
  231. X        max = 0;
  232. X        for (j = 0; j < ntokens; ++j)
  233. X        {
  234. X            if (actionrow[ntokens+j])
  235. X            {
  236. X            if (min > symbol_value[j])
  237. X                min = symbol_value[j];
  238. X            if (max < symbol_value[j])
  239. X                max = symbol_value[j];
  240. X            *r++ = symbol_value[j];
  241. X            *s++ = actionrow[ntokens+j] - 2;
  242. X            }
  243. X        }
  244. X        width[nstates+i] = max - min + 1;
  245. X        }
  246. X    }
  247. X    }
  248. X    FREE(actionrow);
  249. X}
  250. X
  251. Xgoto_actions()
  252. X{
  253. X    register int i, j, k;
  254. X
  255. X    state_count = NEW2(nstates, short);
  256. X
  257. X    k = default_goto(start_symbol + 1);
  258. X    fprintf(output_file, "short yydgoto[] = {%40d,", k);
  259. X    save_column(start_symbol + 1, k);
  260. X
  261. X    j = 10;
  262. X    for (i = start_symbol + 2; i < nsyms; i++)
  263. X    {
  264. X    if (j >= 10)
  265. X    {
  266. X        ++outline;
  267. X        putc('\n', output_file);
  268. X        j = 1;
  269. X    }
  270. X    else
  271. X        ++j;
  272. X
  273. X    k = default_goto(i);
  274. X    fprintf(output_file, "%5d,", k);
  275. X    save_column(i, k);
  276. X    }
  277. X
  278. X    outline += 2;
  279. X    fprintf(output_file, "\n};\n");
  280. X    FREE(state_count);
  281. X}
  282. X
  283. Xint
  284. Xdefault_goto(symbol)
  285. Xint symbol;
  286. X{
  287. X    register int i;
  288. X    register int m;
  289. X    register int n;
  290. X    register int default_state;
  291. X    register int max;
  292. X
  293. X    m = goto_map[symbol];
  294. X    n = goto_map[symbol + 1];
  295. X
  296. X    if (m == n) return (0);
  297. X
  298. X    for (i = 0; i < nstates; i++)
  299. X    state_count[i] = 0;
  300. X
  301. X    for (i = m; i < n; i++)
  302. X    state_count[to_state[i]]++;
  303. X
  304. X    max = 0;
  305. X    default_state = 0;
  306. X    for (i = 0; i < nstates; i++)
  307. X    {
  308. X    if (state_count[i] > max)
  309. X    {
  310. X        max = state_count[i];
  311. X        default_state = i;
  312. X    }
  313. X    }
  314. X
  315. X    return (default_state);
  316. X}
  317. X
  318. X
  319. X
  320. Xsave_column(symbol, default_state)
  321. Xint symbol;
  322. Xint default_state;
  323. X{
  324. X    register int i;
  325. X    register int m;
  326. X    register int n;
  327. X    register short *sp;
  328. X    register short *sp1;
  329. X    register short *sp2;
  330. X    register int count;
  331. X    register int symno;
  332. X
  333. X    m = goto_map[symbol];
  334. X    n = goto_map[symbol + 1];
  335. X
  336. X    count = 0;
  337. X    for (i = m; i < n; i++)
  338. X    {
  339. X    if (to_state[i] != default_state)
  340. X        ++count;
  341. X    }
  342. X    if (count == 0) return;
  343. X
  344. X    symno = symbol_value[symbol] + 2*nstates;
  345. X
  346. X    froms[symno] = sp1 = sp = NEW2(count, short);
  347. X    tos[symno] = sp2 = NEW2(count, short);
  348. X
  349. X    for (i = m; i < n; i++)
  350. X    {
  351. X    if (to_state[i] != default_state)
  352. X    {
  353. X        *sp1++ = from_state[i];
  354. X        *sp2++ = to_state[i];
  355. X    }
  356. X    }
  357. X
  358. X    tally[symno] = count;
  359. X    width[symno] = sp1[-1] - sp[0] + 1;
  360. X}
  361. X
  362. Xsort_actions()
  363. X{
  364. X  register int i;
  365. X  register int j;
  366. X  register int k;
  367. X  register int t;
  368. X  register int w;
  369. X
  370. X  order = NEW2(nvectors, short);
  371. X  nentries = 0;
  372. X
  373. X  for (i = 0; i < nvectors; i++)
  374. X    {
  375. X      if (tally[i] > 0)
  376. X    {
  377. X      t = tally[i];
  378. X      w = width[i];
  379. X      j = nentries - 1;
  380. X
  381. X      while (j >= 0 && (width[order[j]] < w))
  382. X        j--;
  383. X
  384. X      while (j >= 0 && (width[order[j]] == w) && (tally[order[j]] < t))
  385. X        j--;
  386. X
  387. X      for (k = nentries - 1; k > j; k--)
  388. X        order[k + 1] = order[k];
  389. X
  390. X      order[j + 1] = i;
  391. X      nentries++;
  392. X    }
  393. X    }
  394. X}
  395. X
  396. X
  397. Xpack_table()
  398. X{
  399. X    register int i;
  400. X    register int place;
  401. X    register int state;
  402. X
  403. X    base = NEW2(nvectors, short);
  404. X    pos = NEW2(nentries, short);
  405. X
  406. X    maxtable = 1000;
  407. X    table = NEW2(maxtable, short);
  408. X    check = NEW2(maxtable, short);
  409. X
  410. X    lowzero = 0;
  411. X    high = 0;
  412. X
  413. X    for (i = 0; i < maxtable; i++)
  414. X    check[i] = -1;
  415. X
  416. X    for (i = 0; i < nentries; i++)
  417. X    {
  418. X    state = matching_vector(i);
  419. X
  420. X    if (state < 0)
  421. X        place = pack_vector(i);
  422. X    else
  423. X        place = base[state];
  424. X
  425. X    pos[i] = place;
  426. X    base[order[i]] = place;
  427. X    }
  428. X
  429. X    for (i = 0; i < nvectors; i++)
  430. X    {
  431. X    if (froms[i])
  432. X        FREE(froms[i]);
  433. X    if (tos[i])
  434. X        FREE(tos[i]);
  435. X    }
  436. X
  437. X    FREE(froms);
  438. X    FREE(tos);
  439. X    FREE(pos);
  440. X}
  441. X
  442. X
  443. X/*  The function matching_vector determines if the vector specified by    */
  444. X/*  the input parameter matches a previously considered    vector.  The    */
  445. X/*  test at the start of the function checks if the vector represents    */
  446. X/*  a row of shifts over terminal symbols or a row of reductions, or a    */
  447. X/*  column of shifts over a nonterminal symbol.  Berkeley Yacc does not    */
  448. X/*  check if a column of shifts over a nonterminal symbols matches a    */
  449. X/*  previously considered vector.  Because of the nature of LR parsing    */
  450. X/*  tables, no two columns can match.  Therefore, the only possible    */
  451. X/*  match would be between a row and a column.  Such matches are    */
  452. X/*  unlikely.  Therefore, to save time, no attempt is made to see if a    */
  453. X/*  column matches a previously considered vector.            */
  454. X/*                                    */
  455. X/*  Matching_vector is poorly designed.  The test could easily be made    */
  456. X/*  faster.  Also, it depends on the vectors being in a specific    */
  457. X/*  order.                                */
  458. X
  459. Xint
  460. Xmatching_vector(vector)
  461. Xint vector;
  462. X{
  463. X    register int i;
  464. X    register int j;
  465. X    register int k;
  466. X    register int t;
  467. X    register int w;
  468. X    register int match;
  469. X    register int prev;
  470. X
  471. X    i = order[vector];
  472. X    if (i >= 2*nstates)
  473. X    return (-1);
  474. X
  475. X    t = tally[i];
  476. X    w = width[i];
  477. X
  478. X    for (prev = vector - 1; prev >= 0; prev--)
  479. X    {
  480. X    j = order[prev];
  481. X    if (width[j] != w || tally[j] != t)
  482. X        return (-1);
  483. X
  484. X    match = 1;
  485. X    for (k = 0; match && k < t; k++)
  486. X    {
  487. X        if (tos[j][k] != tos[i][k] || froms[j][k] != froms[i][k])
  488. X        match = 0;
  489. X    }
  490. X
  491. X    if (match)
  492. X        return (j);
  493. X    }
  494. X
  495. X    return (-1);
  496. X}
  497. X
  498. X
  499. X
  500. Xint
  501. Xpack_vector(vector)
  502. Xint vector;
  503. X{
  504. X    register int i, j, k, l;
  505. X    register int t;
  506. X    register int loc;
  507. X    register int ok;
  508. X    register short *from;
  509. X    register short *to;
  510. X    int newmax;
  511. X
  512. X    i = order[vector];
  513. X    t = tally[i];
  514. X    assert(t);
  515. X
  516. X    from = froms[i];
  517. X    to = tos[i];
  518. X
  519. X    j = lowzero - from[0];
  520. X    for (k = 1; k < t; ++k)
  521. X    if (lowzero - from[k] > j)
  522. X        j = lowzero - from[k];
  523. X    for (;; ++j)
  524. X    {
  525. X    if (j == 0)
  526. X        continue;
  527. X    ok = 1;
  528. X    for (k = 0; ok && k < t; k++)
  529. X    {
  530. X        loc = j + from[k];
  531. X        if (loc >= maxtable)
  532. X        {
  533. X        if (loc >= MAXTABLE)
  534. X            fatal("maximum table size exceeded");
  535. X
  536. X        newmax = maxtable;
  537. X        do { newmax += 200; } while (newmax <= loc);
  538. X        table = (short *) realloc(table, newmax*sizeof(short));
  539. X        if (table == 0) no_space();
  540. X        check = (short *) realloc(check, newmax*sizeof(short));
  541. X        if (check == 0) no_space();
  542. X        for (l  = maxtable; l < newmax; ++l)
  543. X        {
  544. X            table[l] = 0;
  545. X            check[l] = -1;
  546. X        }
  547. X        maxtable = newmax;
  548. X        }
  549. X
  550. X        if (check[loc] != -1)
  551. X        ok = 0;
  552. X    }
  553. X    for (k = 0; ok && k < vector; k++)
  554. X    {
  555. X        if (pos[k] == j)
  556. X        ok = 0;
  557. X    }
  558. X    if (ok)
  559. X    {
  560. X        for (k = 0; k < t; k++)
  561. X        {
  562. X        loc = j + from[k];
  563. X        table[loc] = to[k];
  564. X        check[loc] = from[k];
  565. X        if (loc > high) high = loc;
  566. X        }
  567. X
  568. X        while (check[lowzero] != -1)
  569. X        ++lowzero;
  570. X
  571. X        return (j);
  572. X    }
  573. X    }
  574. X}
  575. X
  576. X
  577. X
  578. Xoutput_base()
  579. X{
  580. X    register int i, j;
  581. X
  582. X    fprintf(output_file, "short yysindex[] = {%39d,", base[0]);
  583. X
  584. X    j = 10;
  585. X    for (i = 1; i < nstates; i++)
  586. X    {
  587. X    if (j >= 10)
  588. X    {
  589. X        ++outline;
  590. X        putc('\n', output_file);
  591. X        j = 1;
  592. X    }
  593. X    else
  594. X        ++j;
  595. X
  596. X    fprintf(output_file, "%5d,", base[i]);
  597. X    }
  598. X
  599. X    outline += 2;
  600. X    fprintf(output_file, "\n};\nshort yyrindex[] = {%39d,",
  601. X        base[nstates]);
  602. X
  603. X    j = 10;
  604. X    for (i = nstates + 1; i < 2*nstates; i++)
  605. X    {
  606. X    if (j >= 10)
  607. X    {
  608. X        ++outline;
  609. X        putc('\n', output_file);
  610. X        j = 1;
  611. X    }
  612. X    else
  613. X        ++j;
  614. X
  615. X    fprintf(output_file, "%5d,", base[i]);
  616. X    }
  617. X
  618. X    outline += 2;
  619. X    fprintf(output_file, "\n};\nshort yygindex[] = {%39d,",
  620. X        base[2*nstates]);
  621. X
  622. X    j = 10;
  623. X    for (i = 2*nstates + 1; i < nvectors - 1; i++)
  624. X    {
  625. X    if (j >= 10)
  626. X    {
  627. X        ++outline;
  628. X        putc('\n', output_file);
  629. X        j = 1;
  630. X    }
  631. X    else
  632. X        ++j;
  633. X
  634. X    fprintf(output_file, "%5d,", base[i]);
  635. X    }
  636. X
  637. X    outline += 2;
  638. X    fprintf(output_file, "\n};\n");
  639. X    FREE(base);
  640. X}
  641. X
  642. X
  643. X
  644. Xoutput_table()
  645. X{
  646. X    register int i;
  647. X    register int j;
  648. X
  649. X    ++outline;
  650. X    fprintf(output_file, "#define YYTABLESIZE %d\n", high);
  651. X    fprintf(output_file, "short yytable[] = {%40d,", table[0]);
  652. X
  653. X    j = 10;
  654. X    for (i = 1; i <= high; i++)
  655. X    {
  656. X    if (j >= 10)
  657. X    {
  658. X        ++outline;
  659. X        putc('\n', output_file);
  660. X        j = 1;
  661. X    }
  662. X    else
  663. X        ++j;
  664. X
  665. X    fprintf(output_file, "%5d,", table[i]);
  666. X    }
  667. X
  668. X    outline += 2;
  669. X    fprintf(output_file, "\n};\n");
  670. X    FREE(table);
  671. X}
  672. X
  673. X
  674. X
  675. Xoutput_check()
  676. X{
  677. X    register int i;
  678. X    register int j;
  679. X
  680. X    fprintf(output_file, "short yycheck[] = {%40d,", check[0]);
  681. X
  682. X    j = 10;
  683. X    for (i = 1; i <= high; i++)
  684. X    {
  685. X    if (j >= 10)
  686. X    {
  687. X        ++outline;
  688. X        putc('\n', output_file);
  689. X        j = 1;
  690. X    }
  691. X    else
  692. X        ++j;
  693. X
  694. X    fprintf(output_file, "%5d,", check[i]);
  695. X    }
  696. X
  697. X    outline += 2;
  698. X    fprintf(output_file, "\n};\n");
  699. X    FREE(check);
  700. X}
  701. X
  702. X
  703. Xint
  704. Xis_C_identifier(name)
  705. Xchar *name;
  706. X{
  707. X    register char *s;
  708. X    register int c;
  709. X
  710. X    s = name;
  711. X    c = *s;
  712. X    if (c == '"')
  713. X    {
  714. X    c = *++s;
  715. X    if (!isalpha(c) && c != '_' && c != '$')
  716. X        return (0);
  717. X    while ((c = *++s) != '"')
  718. X    {
  719. X        if (!isalnum(c) && c != '_' && c != '$')
  720. X        return (0);
  721. X    }
  722. X    return (1);
  723. X    }
  724. X
  725. X    if (!isalpha(c) && c != '_' && c != '$')
  726. X    return (0);
  727. X    while (c = *++s)
  728. X    {
  729. X    if (!isalnum(c) && c != '_' && c != '$')
  730. X        return (0);
  731. X    }
  732. X    return (1);
  733. X}
  734. X
  735. X
  736. Xoutput_defines()
  737. X{
  738. X    register int c, i;
  739. X    register char *s;
  740. X
  741. X    for (i = 2; i < ntokens; ++i)
  742. X    {
  743. X    s = symbol_name[i];
  744. X    if (is_C_identifier(s))
  745. X    {
  746. X        fprintf(output_file, "#define ");
  747. X        if (dflag) fprintf(defines_file, "#define ");
  748. X        c = *s;
  749. X        if (c == '"')
  750. X        {
  751. X        while ((c = *++s) != '"')
  752. X        {
  753. X            putc(c, output_file);
  754. X            if (dflag) putc(c, defines_file);
  755. X        }
  756. X        }
  757. X        else
  758. X        {
  759. X        do
  760. X        {
  761. X            putc(c, output_file);
  762. X            if (dflag) putc(c, defines_file);
  763. X        }
  764. X        while (c = *++s);
  765. X        }
  766. X        ++outline;
  767. X        fprintf(output_file, " %d\n", symbol_value[i]);
  768. X        if (dflag) fprintf(defines_file, " %d\n", symbol_value[i]);
  769. X    }
  770. X    }
  771. X
  772. X    ++outline;
  773. X    fprintf(output_file, "#define YYERRCODE %d\n", symbol_value[1]);
  774. X
  775. X    if (dflag && unionized)
  776. X    {
  777. X    fclose(union_file);
  778. X    union_file = fopen(union_file_name, "r");
  779. X    if (union_file == NULL) open_error(union_file_name);
  780. X    while ((c = getc(union_file)) != EOF)
  781. X        putc(c, defines_file);
  782. X    fprintf(defines_file, " YYSTYPE;\nextern YYSTYPE yylval;\n");
  783. X    }
  784. X}
  785. X
  786. X
  787. Xoutput_stored_text()
  788. X{
  789. X    register int c;
  790. X    register FILE *in, *out;
  791. X
  792. X    fclose(text_file);
  793. X    text_file = fopen(text_file_name, "r");
  794. X    if (text_file == NULL) open_error(text_file_name);
  795. X    in = text_file;
  796. X    out = output_file;
  797. X    if ((c = getc(in)) == EOF)
  798. X    return;
  799. X    if (c == '\n') ++outline;
  800. X    putc(c, out);
  801. X    while ((c = getc(in)) != EOF)
  802. X    {
  803. X    if (c == '\n') ++outline;
  804. X    putc(c, out);
  805. X    }
  806. X    if (!lflag)
  807. X    {
  808. X    ++outline;
  809. X    fprintf(out, line_format, outline + 1, output_file_name);
  810. X    }
  811. X}
  812. X
  813. X
  814. Xoutput_debug()
  815. X{
  816. X    register int i, j, k, max;
  817. X    char **symnam, *s;
  818. X
  819. X    ++outline;
  820. X    fprintf(output_file, "#define YYFINAL %d\n", final_state);
  821. X    outline += 3;
  822. X    fprintf(output_file, "#ifndef YYDEBUG\n#define YYDEBUG %d\n#endif\n",
  823. X        tflag);
  824. X
  825. X    max = 0;
  826. X    for (i = 2; i < ntokens; ++i)
  827. X    if (symbol_value[i] > max)
  828. X        max = symbol_value[i];
  829. X    ++outline;
  830. X    fprintf(output_file, "#define YYMAXTOKEN %d\n", max);
  831. X
  832. X    symnam = (char **) MALLOC((max+1)*sizeof(char *));
  833. X    if (symnam == 0) no_space();
  834. X    for (i = 0; i < max; ++i)
  835. X    symnam[i] = 0;
  836. X    for (i = ntokens - 1; i >= 2; --i)
  837. X    symnam[symbol_value[i]] = symbol_name[i];
  838. X    symnam[0] = "end-of-file";
  839. X
  840. X    ++outline;
  841. X    fprintf(output_file, "#if YYDEBUG\nchar *yyname[] = {");
  842. X    j = 80;
  843. X    for (i = 0; i <= max; ++i)
  844. X    {
  845. X    if (s = symnam[i])
  846. X    {
  847. X        if (s[0] == '"')
  848. X        {
  849. X        k = 7;
  850. X        while (*++s != '"')
  851. X        {
  852. X            if (*s == '\\')
  853. X            {
  854. X            k += 2;
  855. X            if (*++s == '\\')
  856. X                k += 2;
  857. X            else
  858. X                ++k;
  859. X            }
  860. X            else
  861. X            ++k;
  862. X        }
  863. X        j += k;
  864. X        if (j > 80)
  865. X        {
  866. X            ++outline;
  867. X            putc('\n', output_file);
  868. X            j = k;
  869. X        }
  870. X        fprintf(output_file, "\"\\\"");
  871. X        s = symnam[i];
  872. X        while (*++s != '"')
  873. X        {
  874. X            if (*s == '\\')
  875. X            {
  876. X            fprintf(output_file, "\\\\");
  877. X            if (*++s == '\\')
  878. X                fprintf(output_file, "\\\\");
  879. X            else
  880. X                putc(*s, output_file);
  881. X            }
  882. X            else
  883. X            putc(*s, output_file);
  884. X        }
  885. X        fprintf(output_file, "\\\"\",");
  886. X        }
  887. X        else if (s[0] == '\'')
  888. X        {
  889. X        if (s[1] == '"')
  890. X        {
  891. X            j += 7;
  892. X            if (j > 80)
  893. X            {
  894. X            ++outline;
  895. X            putc('\n', output_file);
  896. X            j = 7;
  897. X            }
  898. X            fprintf(output_file, "\"'\\\"'\",");
  899. X        }
  900. X        else
  901. X        {
  902. X            k = 5;
  903. X            while (*++s != '\'')
  904. X            {
  905. X            if (*s == '\\')
  906. X            {
  907. X                k += 2;
  908. X                ++s;
  909. X                if (*++s == '\\')
  910. X                k += 2;
  911. X                else
  912. X                ++k;
  913. X            }
  914. X            else
  915. X                ++k;
  916. X            }
  917. X            j += k;
  918. X            if (j > 80)
  919. X            {
  920. X            ++outline;
  921. X            putc('\n', output_file);
  922. X            j = k;
  923. X            }
  924. X            fprintf(output_file, "\"'");
  925. X            s = symnam[i];
  926. X            while (*++s != '\'')
  927. X            {
  928. X            if (*s == '\\')
  929. X            {
  930. X                fprintf(output_file, "\\\\");
  931. X                if (*++s == '\\')
  932. X                fprintf(output_file, "\\\\");
  933. X                else
  934. X                putc(*s, output_file);
  935. X            }
  936. X            else
  937. X                putc(*s, output_file);
  938. X            }
  939. X            fprintf(output_file, "'\",");
  940. X        }
  941. X        }
  942. X        else
  943. X        {
  944. X        k = strlen(s) + 3;
  945. X        j += k;
  946. X        if (j > 80)
  947. X        {
  948. X            ++outline;
  949. X            putc('\n', output_file);
  950. X            j = k;
  951. X        }
  952. X        putc('"', output_file);
  953. X        do { putc(*s, output_file); } while (*++s);
  954. X        fprintf(output_file, "\",");
  955. X        }
  956. X    }
  957. X    else
  958. X    {
  959. X        j += 2;
  960. X        if (j > 80)
  961. X        {
  962. X        ++outline;
  963. X        putc('\n', output_file);
  964. X        j = 2;
  965. X        }
  966. X        fprintf(output_file, "0,");
  967. X    }
  968. X    }
  969. X    outline += 2;
  970. X    fprintf(output_file, "\n};\n");
  971. X    FREE(symnam);
  972. X
  973. X    ++outline;
  974. X    fprintf(output_file, "char *yyrule[] = {\n");
  975. X    for (i = 2; i < nrules; ++i)
  976. X    {
  977. X    fprintf(output_file, "\"%s :", symbol_name[rlhs[i]]);
  978. X    for (j = rrhs[i]; ritem[j] > 0; ++j)
  979. X    {
  980. X        s = symbol_name[ritem[j]];
  981. X        if (s[0] == '"')
  982. X        {
  983. X        fprintf(output_file, " \\\"");
  984. X        while (*++s != '"')
  985. X        {
  986. X            if (*s == '\\')
  987. X            {
  988. X            if (s[1] == '\\')
  989. X                fprintf(output_file, "\\\\\\\\");
  990. X            else
  991. X                fprintf(output_file, "\\\\%c", s[1]);
  992. X            ++s;
  993. X            }
  994. X            else
  995. X            putc(*s, output_file);
  996. X        }
  997. X        fprintf(output_file, "\\\"");
  998. X        }
  999. X        else if (s[0] == '\'')
  1000. X        {
  1001. X        if (s[1] == '"')
  1002. X            fprintf(output_file, " '\\\"'");
  1003. X        else if (s[1] == '\\')
  1004. X        {
  1005. X            if (s[2] == '\\')
  1006. X            fprintf(output_file, " '\\\\\\\\");
  1007. X            else
  1008. X            fprintf(output_file, " '\\\\%c", s[2]);
  1009. X            s += 2;
  1010. X            while (*++s != '\'')
  1011. X            putc(*s, output_file);
  1012. X            putc('\'', output_file);
  1013. X        }
  1014. X        else
  1015. X            fprintf(output_file, " '%c'", s[1]);
  1016. X        }
  1017. X        else
  1018. X        fprintf(output_file, " %s", s);
  1019. X    }
  1020. X    ++outline;
  1021. X    fprintf(output_file, "\",\n");
  1022. X    }
  1023. X
  1024. X    outline += 2;
  1025. X    fprintf(output_file, "};\n#endif\n");
  1026. X}
  1027. X
  1028. X
  1029. Xoutput_stype()
  1030. X{
  1031. X    if (!unionized && ntags == 0)
  1032. X    {
  1033. X    outline += 3;
  1034. X    fprintf(output_file, "#ifndef YYSTYPE\ntypedef int YYSTYPE;\n#endif\n");
  1035. X    }
  1036. X}
  1037. X
  1038. X
  1039. Xoutput_trailing_text()
  1040. X{
  1041. X    register int c, last;
  1042. X
  1043. X    if (line == 0)
  1044. X    return;
  1045. X
  1046. X    c = *cptr;
  1047. X    if (c == '\n')
  1048. X    {
  1049. X    ++lineno;
  1050. X    if ((c = getc(input_file)) == EOF)
  1051. X        return;
  1052. X    if (!lflag)
  1053. X    {
  1054. X        ++outline;
  1055. X        fprintf(output_file, line_format, lineno, input_file_name);
  1056. X    }
  1057. X    if (c == '\n') ++outline;
  1058. X    putc(c, output_file);
  1059. X    last = c;
  1060. X    }
  1061. X    else
  1062. X    {
  1063. X    if (!lflag)
  1064. X    {
  1065. X        ++outline;
  1066. X        fprintf(output_file, line_format, lineno, input_file_name);
  1067. X    }
  1068. X    do { putc(c, output_file); } while ((c = *++cptr) != '\n');
  1069. X    ++outline;
  1070. X    putc('\n', output_file);
  1071. X    last = '\n';
  1072. X    }
  1073. X
  1074. X    while ((c = getc(input_file)) != EOF)
  1075. X    {
  1076. X    if (c == '\n') ++outline;
  1077. X    putc(c, output_file);
  1078. X    last = c;
  1079. X    }
  1080. X
  1081. X    if (last != '\n')
  1082. X    {
  1083. X    ++outline;
  1084. X    putc('\n', output_file);
  1085. X    }
  1086. X    if (!lflag)
  1087. X    {
  1088. X    ++outline;
  1089. X    fprintf(output_file, line_format, outline + 1, output_file_name);
  1090. X    }
  1091. X}
  1092. X
  1093. X
  1094. Xoutput_semantic_actions()
  1095. X{
  1096. X    register int c, last;
  1097. X
  1098. X    fclose(action_file);
  1099. X    action_file = fopen(action_file_name, "r");
  1100. X    if (action_file == NULL) open_error(action_file_name);
  1101. X
  1102. X    if ((c = getc(action_file)) == EOF)
  1103. X    return;
  1104. X    last = c;
  1105. X    if (c == '\n') ++outline;
  1106. X    putc(c, output_file);
  1107. X    while ((c = getc(action_file)) != EOF)
  1108. X    {
  1109. X    if (c == '\n') ++outline;
  1110. X    putc(c, output_file);
  1111. X    last = c;
  1112. X    }
  1113. X
  1114. X    if (last != '\n')
  1115. X    {
  1116. X    ++outline;
  1117. X    putc('\n', output_file);
  1118. X    }
  1119. X    if (!lflag)
  1120. X    {
  1121. X    ++outline;
  1122. X    fprintf(output_file, line_format, outline + 1, output_file_name);
  1123. X    }
  1124. X}
  1125. X
  1126. X
  1127. Xfree_itemsets()
  1128. X{
  1129. X    register core *cp, *next;
  1130. X
  1131. X    FREE(state_table);
  1132. X    for (cp = first_state; cp; cp = next)
  1133. X    {
  1134. X    next = cp->next;
  1135. X    FREE(cp);
  1136. X    }
  1137. X}
  1138. X
  1139. X
  1140. Xfree_shifts()
  1141. X{
  1142. X    register shifts *sp, *next;
  1143. X
  1144. X    FREE(shift_table);
  1145. X    for (sp = first_shift; sp; sp = next)
  1146. X    {
  1147. X    next = sp->next;
  1148. X    FREE(sp);
  1149. X    }
  1150. X}
  1151. X
  1152. X
  1153. X
  1154. Xfree_reductions()
  1155. X{
  1156. X    register reductions *rp, *next;
  1157. X
  1158. X    FREE(reduction_table);
  1159. X    for (rp = first_reduction; rp; rp = next)
  1160. X    {
  1161. X    next = rp->next;
  1162. X    FREE(rp);
  1163. X    }
  1164. X}
  1165. END_OF_FILE
  1166. if test 20075 -ne `wc -c <'output.c'`; then
  1167.     echo shar: \"'output.c'\" unpacked with wrong size!
  1168. fi
  1169. # end of 'output.c'
  1170. fi
  1171. if test -f 'test/ftp.output' -a "${1}" != "-c" ; then 
  1172.   echo shar: Will not clobber existing file \"'test/ftp.output'\"
  1173. else
  1174. echo shar: Extracting \"'test/ftp.output'\" \(22197 characters\)
  1175. sed "s/^X//" >'test/ftp.output' <<'END_OF_FILE'
  1176. X   0  $accept : cmd_list $end
  1177. X
  1178. X   1  cmd_list :
  1179. X   2           | cmd_list cmd
  1180. X   3           | cmd_list rcmd
  1181. X
  1182. X   4  cmd : USER SP username CRLF
  1183. X   5      | PASS SP password CRLF
  1184. X   6      | PORT SP host_port CRLF
  1185. X   7      | PASV CRLF
  1186. X   8      | TYPE SP type_code CRLF
  1187. X   9      | STRU SP struct_code CRLF
  1188. X  10      | MODE SP mode_code CRLF
  1189. X  11      | ALLO SP NUMBER CRLF
  1190. X  12      | ALLO SP NUMBER SP R SP NUMBER CRLF
  1191. X  13      | RETR check_login SP pathname CRLF
  1192. X  14      | STOR check_login SP pathname CRLF
  1193. X  15      | APPE check_login SP pathname CRLF
  1194. X  16      | NLST check_login CRLF
  1195. X  17      | NLST check_login SP STRING CRLF
  1196. X  18      | LIST check_login CRLF
  1197. X  19      | LIST check_login SP pathname CRLF
  1198. X  20      | STAT check_login SP pathname CRLF
  1199. X  21      | STAT CRLF
  1200. X  22      | DELE check_login SP pathname CRLF
  1201. X  23      | RNTO SP pathname CRLF
  1202. X  24      | ABOR CRLF
  1203. X  25      | CWD check_login CRLF
  1204. X  26      | CWD check_login SP pathname CRLF
  1205. X  27      | HELP CRLF
  1206. X  28      | HELP SP STRING CRLF
  1207. X  29      | NOOP CRLF
  1208. X  30      | MKD check_login SP pathname CRLF
  1209. X  31      | RMD check_login SP pathname CRLF
  1210. X  32      | PWD check_login CRLF
  1211. X  33      | CDUP check_login CRLF
  1212. X  34      | SITE SP HELP CRLF
  1213. X  35      | SITE SP HELP SP STRING CRLF
  1214. X  36      | SITE SP UMASK check_login CRLF
  1215. X  37      | SITE SP UMASK check_login SP octal_number CRLF
  1216. X  38      | SITE SP CHMOD check_login SP octal_number SP pathname CRLF
  1217. X  39      | SITE SP IDLE CRLF
  1218. X  40      | SITE SP IDLE SP NUMBER CRLF
  1219. X  41      | STOU check_login SP pathname CRLF
  1220. X  42      | SYST CRLF
  1221. X  43      | SIZE check_login SP pathname CRLF
  1222. X  44      | MDTM check_login SP pathname CRLF
  1223. X  45      | QUIT CRLF
  1224. X  46      | error CRLF
  1225. X
  1226. X  47  rcmd : RNFR check_login SP pathname CRLF
  1227. X
  1228. X  48  username : STRING
  1229. X
  1230. X  49  password :
  1231. X  50           | STRING
  1232. X
  1233. X  51  byte_size : NUMBER
  1234. X
  1235. X  52  host_port : NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER
  1236. X
  1237. X  53  form_code : N
  1238. X  54            | T
  1239. X  55            | C
  1240. X
  1241. X  56  type_code : A
  1242. X  57            | A SP form_code
  1243. X  58            | E
  1244. X  59            | E SP form_code
  1245. X  60            | I
  1246. X  61            | L
  1247. X  62            | L SP byte_size
  1248. X  63            | L byte_size
  1249. X
  1250. X  64  struct_code : F
  1251. X  65              | R
  1252. X  66              | P
  1253. X
  1254. X  67  mode_code : S
  1255. X  68            | B
  1256. X  69            | C
  1257. X
  1258. X  70  pathname : pathstring
  1259. X
  1260. X  71  pathstring : STRING
  1261. X
  1262. X  72  octal_number : NUMBER
  1263. X
  1264. X  73  check_login :
  1265. X
  1266. Xstate 0
  1267. X    $accept : . cmd_list $end  (0)
  1268. X    cmd_list : .  (1)
  1269. X
  1270. X    .  reduce 1
  1271. X
  1272. X    cmd_list  goto 1
  1273. X
  1274. X
  1275. Xstate 1
  1276. X    $accept : cmd_list . $end  (0)
  1277. X    cmd_list : cmd_list . cmd  (2)
  1278. X    cmd_list : cmd_list . rcmd  (3)
  1279. X
  1280. X    $end  accept
  1281. X    error  shift 2
  1282. X    USER  shift 3
  1283. X    PASS  shift 4
  1284. X    QUIT  shift 5
  1285. X    PORT  shift 6
  1286. X    PASV  shift 7
  1287. X    TYPE  shift 8
  1288. X    STRU  shift 9
  1289. X    MODE  shift 10
  1290. X    RETR  shift 11
  1291. X    STOR  shift 12
  1292. X    APPE  shift 13
  1293. X    ALLO  shift 14
  1294. X    RNFR  shift 15
  1295. X    RNTO  shift 16
  1296. X    ABOR  shift 17
  1297. X    DELE  shift 18
  1298. X    CWD  shift 19
  1299. X    LIST  shift 20
  1300. X    NLST  shift 21
  1301. X    SITE  shift 22
  1302. X    STAT  shift 23
  1303. X    HELP  shift 24
  1304. X    NOOP  shift 25
  1305. X    MKD  shift 26
  1306. X    RMD  shift 27
  1307. X    PWD  shift 28
  1308. X    CDUP  shift 29
  1309. X    STOU  shift 30
  1310. X    SYST  shift 31
  1311. X    SIZE  shift 32
  1312. X    MDTM  shift 33
  1313. X    .  error
  1314. X
  1315. X    cmd  goto 34
  1316. X    rcmd  goto 35
  1317. X
  1318. X
  1319. Xstate 2
  1320. X    cmd : error . CRLF  (46)
  1321. X
  1322. X    CRLF  shift 36
  1323. X    .  error
  1324. X
  1325. X
  1326. Xstate 3
  1327. X    cmd : USER . SP username CRLF  (4)
  1328. X
  1329. X    SP  shift 37
  1330. X    .  error
  1331. X
  1332. X
  1333. Xstate 4
  1334. X    cmd : PASS . SP password CRLF  (5)
  1335. X
  1336. X    SP  shift 38
  1337. X    .  error
  1338. X
  1339. X
  1340. Xstate 5
  1341. X    cmd : QUIT . CRLF  (45)
  1342. X
  1343. X    CRLF  shift 39
  1344. X    .  error
  1345. X
  1346. X
  1347. Xstate 6
  1348. X    cmd : PORT . SP host_port CRLF  (6)
  1349. X
  1350. X    SP  shift 40
  1351. X    .  error
  1352. X
  1353. X
  1354. Xstate 7
  1355. X    cmd : PASV . CRLF  (7)
  1356. X
  1357. X    CRLF  shift 41
  1358. X    .  error
  1359. X
  1360. X
  1361. Xstate 8
  1362. X    cmd : TYPE . SP type_code CRLF  (8)
  1363. X
  1364. X    SP  shift 42
  1365. X    .  error
  1366. X
  1367. X
  1368. Xstate 9
  1369. X    cmd : STRU . SP struct_code CRLF  (9)
  1370. X
  1371. X    SP  shift 43
  1372. X    .  error
  1373. X
  1374. X
  1375. Xstate 10
  1376. X    cmd : MODE . SP mode_code CRLF  (10)
  1377. X
  1378. X    SP  shift 44
  1379. X    .  error
  1380. X
  1381. X
  1382. Xstate 11
  1383. X    cmd : RETR . check_login SP pathname CRLF  (13)
  1384. X    check_login : .  (73)
  1385. X
  1386. X    .  reduce 73
  1387. X
  1388. X    check_login  goto 45
  1389. X
  1390. X
  1391. Xstate 12
  1392. X    cmd : STOR . check_login SP pathname CRLF  (14)
  1393. X    check_login : .  (73)
  1394. X
  1395. X    .  reduce 73
  1396. X
  1397. X    check_login  goto 46
  1398. X
  1399. X
  1400. Xstate 13
  1401. X    cmd : APPE . check_login SP pathname CRLF  (15)
  1402. X    check_login : .  (73)
  1403. X
  1404. X    .  reduce 73
  1405. X
  1406. X    check_login  goto 47
  1407. X
  1408. X
  1409. Xstate 14
  1410. X    cmd : ALLO . SP NUMBER CRLF  (11)
  1411. X    cmd : ALLO . SP NUMBER SP R SP NUMBER CRLF  (12)
  1412. X
  1413. X    SP  shift 48
  1414. X    .  error
  1415. X
  1416. X
  1417. Xstate 15
  1418. X    rcmd : RNFR . check_login SP pathname CRLF  (47)
  1419. X    check_login : .  (73)
  1420. X
  1421. X    .  reduce 73
  1422. X
  1423. X    check_login  goto 49
  1424. X
  1425. X
  1426. Xstate 16
  1427. X    cmd : RNTO . SP pathname CRLF  (23)
  1428. X
  1429. X    SP  shift 50
  1430. X    .  error
  1431. X
  1432. X
  1433. Xstate 17
  1434. X    cmd : ABOR . CRLF  (24)
  1435. X
  1436. X    CRLF  shift 51
  1437. X    .  error
  1438. X
  1439. X
  1440. Xstate 18
  1441. X    cmd : DELE . check_login SP pathname CRLF  (22)
  1442. X    check_login : .  (73)
  1443. X
  1444. X    .  reduce 73
  1445. X
  1446. X    check_login  goto 52
  1447. X
  1448. X
  1449. Xstate 19
  1450. X    cmd : CWD . check_login CRLF  (25)
  1451. X    cmd : CWD . check_login SP pathname CRLF  (26)
  1452. X    check_login : .  (73)
  1453. X
  1454. X    .  reduce 73
  1455. X
  1456. X    check_login  goto 53
  1457. X
  1458. X
  1459. Xstate 20
  1460. X    cmd : LIST . check_login CRLF  (18)
  1461. X    cmd : LIST . check_login SP pathname CRLF  (19)
  1462. X    check_login : .  (73)
  1463. X
  1464. X    .  reduce 73
  1465. X
  1466. X    check_login  goto 54
  1467. X
  1468. X
  1469. Xstate 21
  1470. X    cmd : NLST . check_login CRLF  (16)
  1471. X    cmd : NLST . check_login SP STRING CRLF  (17)
  1472. X    check_login : .  (73)
  1473. X
  1474. X    .  reduce 73
  1475. X
  1476. X    check_login  goto 55
  1477. X
  1478. X
  1479. Xstate 22
  1480. X    cmd : SITE . SP HELP CRLF  (34)
  1481. X    cmd : SITE . SP HELP SP STRING CRLF  (35)
  1482. X    cmd : SITE . SP UMASK check_login CRLF  (36)
  1483. X    cmd : SITE . SP UMASK check_login SP octal_number CRLF  (37)
  1484. X    cmd : SITE . SP CHMOD check_login SP octal_number SP pathname CRLF  (38)
  1485. X    cmd : SITE . SP IDLE CRLF  (39)
  1486. X    cmd : SITE . SP IDLE SP NUMBER CRLF  (40)
  1487. X
  1488. X    SP  shift 56
  1489. X    .  error
  1490. X
  1491. X
  1492. Xstate 23
  1493. X    cmd : STAT . check_login SP pathname CRLF  (20)
  1494. X    cmd : STAT . CRLF  (21)
  1495. X    check_login : .  (73)
  1496. X
  1497. X    CRLF  shift 57
  1498. X    SP  reduce 73
  1499. X
  1500. X    check_login  goto 58
  1501. X
  1502. X
  1503. Xstate 24
  1504. X    cmd : HELP . CRLF  (27)
  1505. X    cmd : HELP . SP STRING CRLF  (28)
  1506. X
  1507. X    SP  shift 59
  1508. X    CRLF  shift 60
  1509. X    .  error
  1510. X
  1511. X
  1512. Xstate 25
  1513. X    cmd : NOOP . CRLF  (29)
  1514. X
  1515. X    CRLF  shift 61
  1516. X    .  error
  1517. X
  1518. X
  1519. Xstate 26
  1520. X    cmd : MKD . check_login SP pathname CRLF  (30)
  1521. X    check_login : .  (73)
  1522. X
  1523. X    .  reduce 73
  1524. X
  1525. X    check_login  goto 62
  1526. X
  1527. X
  1528. Xstate 27
  1529. X    cmd : RMD . check_login SP pathname CRLF  (31)
  1530. X    check_login : .  (73)
  1531. X
  1532. X    .  reduce 73
  1533. X
  1534. X    check_login  goto 63
  1535. X
  1536. X
  1537. Xstate 28
  1538. X    cmd : PWD . check_login CRLF  (32)
  1539. X    check_login : .  (73)
  1540. X
  1541. X    .  reduce 73
  1542. X
  1543. X    check_login  goto 64
  1544. X
  1545. X
  1546. Xstate 29
  1547. X    cmd : CDUP . check_login CRLF  (33)
  1548. X    check_login : .  (73)
  1549. X
  1550. X    .  reduce 73
  1551. X
  1552. X    check_login  goto 65
  1553. X
  1554. X
  1555. Xstate 30
  1556. X    cmd : STOU . check_login SP pathname CRLF  (41)
  1557. X    check_login : .  (73)
  1558. X
  1559. X    .  reduce 73
  1560. X
  1561. X    check_login  goto 66
  1562. X
  1563. X
  1564. Xstate 31
  1565. X    cmd : SYST . CRLF  (42)
  1566. X
  1567. X    CRLF  shift 67
  1568. X    .  error
  1569. X
  1570. X
  1571. Xstate 32
  1572. X    cmd : SIZE . check_login SP pathname CRLF  (43)
  1573. X    check_login : .  (73)
  1574. X
  1575. X    .  reduce 73
  1576. X
  1577. X    check_login  goto 68
  1578. X
  1579. X
  1580. Xstate 33
  1581. X    cmd : MDTM . check_login SP pathname CRLF  (44)
  1582. X    check_login : .  (73)
  1583. X
  1584. X    .  reduce 73
  1585. X
  1586. X    check_login  goto 69
  1587. X
  1588. X
  1589. Xstate 34
  1590. X    cmd_list : cmd_list cmd .  (2)
  1591. X
  1592. X    .  reduce 2
  1593. X
  1594. X
  1595. Xstate 35
  1596. X    cmd_list : cmd_list rcmd .  (3)
  1597. X
  1598. X    .  reduce 3
  1599. X
  1600. X
  1601. Xstate 36
  1602. X    cmd : error CRLF .  (46)
  1603. X
  1604. X    .  reduce 46
  1605. X
  1606. X
  1607. Xstate 37
  1608. X    cmd : USER SP . username CRLF  (4)
  1609. X
  1610. X    STRING  shift 70
  1611. X    .  error
  1612. X
  1613. X    username  goto 71
  1614. X
  1615. X
  1616. Xstate 38
  1617. X    cmd : PASS SP . password CRLF  (5)
  1618. X    password : .  (49)
  1619. X
  1620. X    STRING  shift 72
  1621. X    CRLF  reduce 49
  1622. X
  1623. X    password  goto 73
  1624. X
  1625. X
  1626. Xstate 39
  1627. X    cmd : QUIT CRLF .  (45)
  1628. X
  1629. X    .  reduce 45
  1630. X
  1631. X
  1632. Xstate 40
  1633. X    cmd : PORT SP . host_port CRLF  (6)
  1634. X
  1635. X    NUMBER  shift 74
  1636. X    .  error
  1637. X
  1638. X    host_port  goto 75
  1639. X
  1640. X
  1641. Xstate 41
  1642. X    cmd : PASV CRLF .  (7)
  1643. X
  1644. X    .  reduce 7
  1645. X
  1646. X
  1647. Xstate 42
  1648. X    cmd : TYPE SP . type_code CRLF  (8)
  1649. X
  1650. X    A  shift 76
  1651. X    E  shift 77
  1652. X    I  shift 78
  1653. X    L  shift 79
  1654. X    .  error
  1655. X
  1656. X    type_code  goto 80
  1657. X
  1658. X
  1659. Xstate 43
  1660. X    cmd : STRU SP . struct_code CRLF  (9)
  1661. X
  1662. X    F  shift 81
  1663. X    P  shift 82
  1664. X    R  shift 83
  1665. X    .  error
  1666. X
  1667. X    struct_code  goto 84
  1668. X
  1669. X
  1670. Xstate 44
  1671. X    cmd : MODE SP . mode_code CRLF  (10)
  1672. X
  1673. X    B  shift 85
  1674. X    C  shift 86
  1675. X    S  shift 87
  1676. X    .  error
  1677. X
  1678. X    mode_code  goto 88
  1679. X
  1680. X
  1681. Xstate 45
  1682. X    cmd : RETR check_login . SP pathname CRLF  (13)
  1683. X
  1684. X    SP  shift 89
  1685. X    .  error
  1686. X
  1687. X
  1688. Xstate 46
  1689. X    cmd : STOR check_login . SP pathname CRLF  (14)
  1690. X
  1691. X    SP  shift 90
  1692. X    .  error
  1693. X
  1694. X
  1695. Xstate 47
  1696. X    cmd : APPE check_login . SP pathname CRLF  (15)
  1697. X
  1698. X    SP  shift 91
  1699. X    .  error
  1700. X
  1701. X
  1702. Xstate 48
  1703. X    cmd : ALLO SP . NUMBER CRLF  (11)
  1704. X    cmd : ALLO SP . NUMBER SP R SP NUMBER CRLF  (12)
  1705. X
  1706. X    NUMBER  shift 92
  1707. X    .  error
  1708. X
  1709. X
  1710. Xstate 49
  1711. X    rcmd : RNFR check_login . SP pathname CRLF  (47)
  1712. X
  1713. X    SP  shift 93
  1714. X    .  error
  1715. X
  1716. X
  1717. Xstate 50
  1718. X    cmd : RNTO SP . pathname CRLF  (23)
  1719. X
  1720. X    STRING  shift 94
  1721. X    .  error
  1722. X
  1723. X    pathname  goto 95
  1724. X    pathstring  goto 96
  1725. X
  1726. X
  1727. Xstate 51
  1728. X    cmd : ABOR CRLF .  (24)
  1729. X
  1730. X    .  reduce 24
  1731. X
  1732. X
  1733. Xstate 52
  1734. X    cmd : DELE check_login . SP pathname CRLF  (22)
  1735. X
  1736. X    SP  shift 97
  1737. X    .  error
  1738. X
  1739. X
  1740. Xstate 53
  1741. X    cmd : CWD check_login . CRLF  (25)
  1742. X    cmd : CWD check_login . SP pathname CRLF  (26)
  1743. X
  1744. X    SP  shift 98
  1745. X    CRLF  shift 99
  1746. X    .  error
  1747. X
  1748. X
  1749. Xstate 54
  1750. X    cmd : LIST check_login . CRLF  (18)
  1751. X    cmd : LIST check_login . SP pathname CRLF  (19)
  1752. X
  1753. X    SP  shift 100
  1754. X    CRLF  shift 101
  1755. X    .  error
  1756. X
  1757. X
  1758. Xstate 55
  1759. X    cmd : NLST check_login . CRLF  (16)
  1760. X    cmd : NLST check_login . SP STRING CRLF  (17)
  1761. X
  1762. X    SP  shift 102
  1763. X    CRLF  shift 103
  1764. X    .  error
  1765. X
  1766. X
  1767. Xstate 56
  1768. X    cmd : SITE SP . HELP CRLF  (34)
  1769. X    cmd : SITE SP . HELP SP STRING CRLF  (35)
  1770. X    cmd : SITE SP . UMASK check_login CRLF  (36)
  1771. X    cmd : SITE SP . UMASK check_login SP octal_number CRLF  (37)
  1772. X    cmd : SITE SP . CHMOD check_login SP octal_number SP pathname CRLF  (38)
  1773. X    cmd : SITE SP . IDLE CRLF  (39)
  1774. X    cmd : SITE SP . IDLE SP NUMBER CRLF  (40)
  1775. X
  1776. X    HELP  shift 104
  1777. X    UMASK  shift 105
  1778. X    IDLE  shift 106
  1779. X    CHMOD  shift 107
  1780. X    .  error
  1781. X
  1782. X
  1783. Xstate 57
  1784. X    cmd : STAT CRLF .  (21)
  1785. X
  1786. X    .  reduce 21
  1787. X
  1788. X
  1789. Xstate 58
  1790. X    cmd : STAT check_login . SP pathname CRLF  (20)
  1791. X
  1792. X    SP  shift 108
  1793. X    .  error
  1794. X
  1795. X
  1796. Xstate 59
  1797. X    cmd : HELP SP . STRING CRLF  (28)
  1798. X
  1799. X    STRING  shift 109
  1800. X    .  error
  1801. X
  1802. X
  1803. Xstate 60
  1804. X    cmd : HELP CRLF .  (27)
  1805. X
  1806. X    .  reduce 27
  1807. X
  1808. X
  1809. Xstate 61
  1810. X    cmd : NOOP CRLF .  (29)
  1811. X
  1812. X    .  reduce 29
  1813. X
  1814. X
  1815. Xstate 62
  1816. X    cmd : MKD check_login . SP pathname CRLF  (30)
  1817. X
  1818. X    SP  shift 110
  1819. X    .  error
  1820. X
  1821. X
  1822. Xstate 63
  1823. X    cmd : RMD check_login . SP pathname CRLF  (31)
  1824. X
  1825. X    SP  shift 111
  1826. X    .  error
  1827. X
  1828. X
  1829. Xstate 64
  1830. X    cmd : PWD check_login . CRLF  (32)
  1831. X
  1832. X    CRLF  shift 112
  1833. X    .  error
  1834. X
  1835. X
  1836. Xstate 65
  1837. X    cmd : CDUP check_login . CRLF  (33)
  1838. X
  1839. X    CRLF  shift 113
  1840. X    .  error
  1841. X
  1842. X
  1843. Xstate 66
  1844. X    cmd : STOU check_login . SP pathname CRLF  (41)
  1845. X
  1846. X    SP  shift 114
  1847. X    .  error
  1848. X
  1849. X
  1850. Xstate 67
  1851. X    cmd : SYST CRLF .  (42)
  1852. X
  1853. X    .  reduce 42
  1854. X
  1855. X
  1856. Xstate 68
  1857. X    cmd : SIZE check_login . SP pathname CRLF  (43)
  1858. X
  1859. X    SP  shift 115
  1860. X    .  error
  1861. X
  1862. X
  1863. Xstate 69
  1864. X    cmd : MDTM check_login . SP pathname CRLF  (44)
  1865. X
  1866. X    SP  shift 116
  1867. X    .  error
  1868. X
  1869. X
  1870. Xstate 70
  1871. X    username : STRING .  (48)
  1872. X
  1873. X    .  reduce 48
  1874. X
  1875. X
  1876. Xstate 71
  1877. X    cmd : USER SP username . CRLF  (4)
  1878. X
  1879. X    CRLF  shift 117
  1880. X    .  error
  1881. X
  1882. X
  1883. Xstate 72
  1884. X    password : STRING .  (50)
  1885. X
  1886. X    .  reduce 50
  1887. X
  1888. X
  1889. Xstate 73
  1890. X    cmd : PASS SP password . CRLF  (5)
  1891. X
  1892. X    CRLF  shift 118
  1893. X    .  error
  1894. X
  1895. X
  1896. Xstate 74
  1897. X    host_port : NUMBER . COMMA NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER  (52)
  1898. X
  1899. X    COMMA  shift 119
  1900. X    .  error
  1901. X
  1902. X
  1903. Xstate 75
  1904. X    cmd : PORT SP host_port . CRLF  (6)
  1905. X
  1906. X    CRLF  shift 120
  1907. X    .  error
  1908. X
  1909. X
  1910. Xstate 76
  1911. X    type_code : A .  (56)
  1912. X    type_code : A . SP form_code  (57)
  1913. X
  1914. X    SP  shift 121
  1915. X    CRLF  reduce 56
  1916. X
  1917. X
  1918. Xstate 77
  1919. X    type_code : E .  (58)
  1920. X    type_code : E . SP form_code  (59)
  1921. X
  1922. X    SP  shift 122
  1923. X    CRLF  reduce 58
  1924. X
  1925. X
  1926. Xstate 78
  1927. X    type_code : I .  (60)
  1928. X
  1929. X    .  reduce 60
  1930. X
  1931. X
  1932. Xstate 79
  1933. X    type_code : L .  (61)
  1934. X    type_code : L . SP byte_size  (62)
  1935. X    type_code : L . byte_size  (63)
  1936. X
  1937. X    SP  shift 123
  1938. X    NUMBER  shift 124
  1939. X    CRLF  reduce 61
  1940. X
  1941. X    byte_size  goto 125
  1942. X
  1943. X
  1944. Xstate 80
  1945. X    cmd : TYPE SP type_code . CRLF  (8)
  1946. X
  1947. X    CRLF  shift 126
  1948. X    .  error
  1949. X
  1950. X
  1951. Xstate 81
  1952. X    struct_code : F .  (64)
  1953. X
  1954. X    .  reduce 64
  1955. X
  1956. X
  1957. Xstate 82
  1958. X    struct_code : P .  (66)
  1959. X
  1960. X    .  reduce 66
  1961. X
  1962. X
  1963. Xstate 83
  1964. X    struct_code : R .  (65)
  1965. X
  1966. X    .  reduce 65
  1967. X
  1968. X
  1969. Xstate 84
  1970. X    cmd : STRU SP struct_code . CRLF  (9)
  1971. X
  1972. X    CRLF  shift 127
  1973. X    .  error
  1974. X
  1975. X
  1976. Xstate 85
  1977. X    mode_code : B .  (68)
  1978. X
  1979. X    .  reduce 68
  1980. X
  1981. X
  1982. Xstate 86
  1983. X    mode_code : C .  (69)
  1984. X
  1985. X    .  reduce 69
  1986. X
  1987. X
  1988. Xstate 87
  1989. X    mode_code : S .  (67)
  1990. X
  1991. X    .  reduce 67
  1992. X
  1993. X
  1994. Xstate 88
  1995. X    cmd : MODE SP mode_code . CRLF  (10)
  1996. X
  1997. X    CRLF  shift 128
  1998. X    .  error
  1999. X
  2000. X
  2001. Xstate 89
  2002. X    cmd : RETR check_login SP . pathname CRLF  (13)
  2003. X
  2004. X    STRING  shift 94
  2005. X    .  error
  2006. X
  2007. X    pathname  goto 129
  2008. X    pathstring  goto 96
  2009. X
  2010. X
  2011. Xstate 90
  2012. X    cmd : STOR check_login SP . pathname CRLF  (14)
  2013. X
  2014. X    STRING  shift 94
  2015. X    .  error
  2016. X
  2017. X    pathname  goto 130
  2018. X    pathstring  goto 96
  2019. X
  2020. X
  2021. Xstate 91
  2022. X    cmd : APPE check_login SP . pathname CRLF  (15)
  2023. X
  2024. X    STRING  shift 94
  2025. X    .  error
  2026. X
  2027. X    pathname  goto 131
  2028. X    pathstring  goto 96
  2029. X
  2030. X
  2031. Xstate 92
  2032. X    cmd : ALLO SP NUMBER . CRLF  (11)
  2033. X    cmd : ALLO SP NUMBER . SP R SP NUMBER CRLF  (12)
  2034. X
  2035. X    SP  shift 132
  2036. X    CRLF  shift 133
  2037. X    .  error
  2038. X
  2039. X
  2040. Xstate 93
  2041. X    rcmd : RNFR check_login SP . pathname CRLF  (47)
  2042. X
  2043. X    STRING  shift 94
  2044. X    .  error
  2045. X
  2046. X    pathname  goto 134
  2047. X    pathstring  goto 96
  2048. X
  2049. X
  2050. Xstate 94
  2051. X    pathstring : STRING .  (71)
  2052. X
  2053. X    .  reduce 71
  2054. X
  2055. X
  2056. Xstate 95
  2057. X    cmd : RNTO SP pathname . CRLF  (23)
  2058. X
  2059. X    CRLF  shift 135
  2060. X    .  error
  2061. X
  2062. X
  2063. Xstate 96
  2064. X    pathname : pathstring .  (70)
  2065. X
  2066. X    .  reduce 70
  2067. X
  2068. X
  2069. Xstate 97
  2070. X    cmd : DELE check_login SP . pathname CRLF  (22)
  2071. X
  2072. X    STRING  shift 94
  2073. X    .  error
  2074. X
  2075. X    pathname  goto 136
  2076. X    pathstring  goto 96
  2077. X
  2078. X
  2079. Xstate 98
  2080. X    cmd : CWD check_login SP . pathname CRLF  (26)
  2081. X
  2082. X    STRING  shift 94
  2083. X    .  error
  2084. X
  2085. X    pathname  goto 137
  2086. X    pathstring  goto 96
  2087. X
  2088. X
  2089. Xstate 99
  2090. X    cmd : CWD check_login CRLF .  (25)
  2091. X
  2092. X    .  reduce 25
  2093. X
  2094. X
  2095. Xstate 100
  2096. X    cmd : LIST check_login SP . pathname CRLF  (19)
  2097. X
  2098. X    STRING  shift 94
  2099. X    .  error
  2100. X
  2101. X    pathname  goto 138
  2102. X    pathstring  goto 96
  2103. X
  2104. X
  2105. Xstate 101
  2106. X    cmd : LIST check_login CRLF .  (18)
  2107. X
  2108. X    .  reduce 18
  2109. X
  2110. X
  2111. Xstate 102
  2112. X    cmd : NLST check_login SP . STRING CRLF  (17)
  2113. X
  2114. X    STRING  shift 139
  2115. X    .  error
  2116. X
  2117. X
  2118. Xstate 103
  2119. X    cmd : NLST check_login CRLF .  (16)
  2120. X
  2121. X    .  reduce 16
  2122. X
  2123. X
  2124. Xstate 104
  2125. X    cmd : SITE SP HELP . CRLF  (34)
  2126. X    cmd : SITE SP HELP . SP STRING CRLF  (35)
  2127. X
  2128. X    SP  shift 140
  2129. X    CRLF  shift 141
  2130. X    .  error
  2131. X
  2132. X
  2133. Xstate 105
  2134. X    cmd : SITE SP UMASK . check_login CRLF  (36)
  2135. X    cmd : SITE SP UMASK . check_login SP octal_number CRLF  (37)
  2136. X    check_login : .  (73)
  2137. X
  2138. X    .  reduce 73
  2139. X
  2140. X    check_login  goto 142
  2141. X
  2142. X
  2143. Xstate 106
  2144. X    cmd : SITE SP IDLE . CRLF  (39)
  2145. X    cmd : SITE SP IDLE . SP NUMBER CRLF  (40)
  2146. X
  2147. X    SP  shift 143
  2148. X    CRLF  shift 144
  2149. X    .  error
  2150. X
  2151. X
  2152. Xstate 107
  2153. X    cmd : SITE SP CHMOD . check_login SP octal_number SP pathname CRLF  (38)
  2154. X    check_login : .  (73)
  2155. X
  2156. X    .  reduce 73
  2157. X
  2158. X    check_login  goto 145
  2159. X
  2160. X
  2161. Xstate 108
  2162. X    cmd : STAT check_login SP . pathname CRLF  (20)
  2163. X
  2164. X    STRING  shift 94
  2165. X    .  error
  2166. X
  2167. X    pathname  goto 146
  2168. X    pathstring  goto 96
  2169. X
  2170. X
  2171. Xstate 109
  2172. X    cmd : HELP SP STRING . CRLF  (28)
  2173. X
  2174. X    CRLF  shift 147
  2175. X    .  error
  2176. X
  2177. X
  2178. Xstate 110
  2179. X    cmd : MKD check_login SP . pathname CRLF  (30)
  2180. X
  2181. X    STRING  shift 94
  2182. X    .  error
  2183. X
  2184. X    pathname  goto 148
  2185. X    pathstring  goto 96
  2186. X
  2187. X
  2188. Xstate 111
  2189. X    cmd : RMD check_login SP . pathname CRLF  (31)
  2190. X
  2191. X    STRING  shift 94
  2192. X    .  error
  2193. X
  2194. X    pathname  goto 149
  2195. X    pathstring  goto 96
  2196. X
  2197. X
  2198. Xstate 112
  2199. X    cmd : PWD check_login CRLF .  (32)
  2200. X
  2201. X    .  reduce 32
  2202. X
  2203. X
  2204. Xstate 113
  2205. X    cmd : CDUP check_login CRLF .  (33)
  2206. X
  2207. X    .  reduce 33
  2208. X
  2209. X
  2210. Xstate 114
  2211. X    cmd : STOU check_login SP . pathname CRLF  (41)
  2212. X
  2213. X    STRING  shift 94
  2214. X    .  error
  2215. X
  2216. X    pathname  goto 150
  2217. X    pathstring  goto 96
  2218. X
  2219. X
  2220. Xstate 115
  2221. X    cmd : SIZE check_login SP . pathname CRLF  (43)
  2222. X
  2223. X    STRING  shift 94
  2224. X    .  error
  2225. X
  2226. X    pathname  goto 151
  2227. X    pathstring  goto 96
  2228. X
  2229. X
  2230. Xstate 116
  2231. X    cmd : MDTM check_login SP . pathname CRLF  (44)
  2232. X
  2233. X    STRING  shift 94
  2234. X    .  error
  2235. X
  2236. X    pathname  goto 152
  2237. X    pathstring  goto 96
  2238. X
  2239. X
  2240. Xstate 117
  2241. X    cmd : USER SP username CRLF .  (4)
  2242. X
  2243. X    .  reduce 4
  2244. X
  2245. X
  2246. Xstate 118
  2247. X    cmd : PASS SP password CRLF .  (5)
  2248. X
  2249. X    .  reduce 5
  2250. X
  2251. X
  2252. Xstate 119
  2253. X    host_port : NUMBER COMMA . NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER  (52)
  2254. X
  2255. X    NUMBER  shift 153
  2256. X    .  error
  2257. X
  2258. X
  2259. Xstate 120
  2260. X    cmd : PORT SP host_port CRLF .  (6)
  2261. X
  2262. X    .  reduce 6
  2263. X
  2264. X
  2265. Xstate 121
  2266. X    type_code : A SP . form_code  (57)
  2267. X
  2268. X    C  shift 154
  2269. X    N  shift 155
  2270. X    T  shift 156
  2271. X    .  error
  2272. X
  2273. X    form_code  goto 157
  2274. X
  2275. X
  2276. Xstate 122
  2277. X    type_code : E SP . form_code  (59)
  2278. X
  2279. X    C  shift 154
  2280. X    N  shift 155
  2281. X    T  shift 156
  2282. X    .  error
  2283. X
  2284. X    form_code  goto 158
  2285. X
  2286. X
  2287. Xstate 123
  2288. X    type_code : L SP . byte_size  (62)
  2289. X
  2290. X    NUMBER  shift 124
  2291. X    .  error
  2292. X
  2293. X    byte_size  goto 159
  2294. X
  2295. X
  2296. Xstate 124
  2297. X    byte_size : NUMBER .  (51)
  2298. X
  2299. X    .  reduce 51
  2300. X
  2301. X
  2302. Xstate 125
  2303. X    type_code : L byte_size .  (63)
  2304. X
  2305. X    .  reduce 63
  2306. X
  2307. X
  2308. Xstate 126
  2309. X    cmd : TYPE SP type_code CRLF .  (8)
  2310. X
  2311. X    .  reduce 8
  2312. X
  2313. X
  2314. Xstate 127
  2315. X    cmd : STRU SP struct_code CRLF .  (9)
  2316. X
  2317. X    .  reduce 9
  2318. X
  2319. X
  2320. Xstate 128
  2321. X    cmd : MODE SP mode_code CRLF .  (10)
  2322. X
  2323. X    .  reduce 10
  2324. X
  2325. X
  2326. Xstate 129
  2327. X    cmd : RETR check_login SP pathname . CRLF  (13)
  2328. X
  2329. X    CRLF  shift 160
  2330. X    .  error
  2331. X
  2332. X
  2333. Xstate 130
  2334. X    cmd : STOR check_login SP pathname . CRLF  (14)
  2335. X
  2336. X    CRLF  shift 161
  2337. X    .  error
  2338. X
  2339. X
  2340. Xstate 131
  2341. X    cmd : APPE check_login SP pathname . CRLF  (15)
  2342. X
  2343. X    CRLF  shift 162
  2344. X    .  error
  2345. X
  2346. X
  2347. Xstate 132
  2348. X    cmd : ALLO SP NUMBER SP . R SP NUMBER CRLF  (12)
  2349. X
  2350. X    R  shift 163
  2351. X    .  error
  2352. X
  2353. X
  2354. Xstate 133
  2355. X    cmd : ALLO SP NUMBER CRLF .  (11)
  2356. X
  2357. X    .  reduce 11
  2358. X
  2359. X
  2360. Xstate 134
  2361. X    rcmd : RNFR check_login SP pathname . CRLF  (47)
  2362. X
  2363. X    CRLF  shift 164
  2364. X    .  error
  2365. X
  2366. X
  2367. Xstate 135
  2368. X    cmd : RNTO SP pathname CRLF .  (23)
  2369. X
  2370. X    .  reduce 23
  2371. X
  2372. X
  2373. Xstate 136
  2374. X    cmd : DELE check_login SP pathname . CRLF  (22)
  2375. X
  2376. X    CRLF  shift 165
  2377. X    .  error
  2378. X
  2379. X
  2380. Xstate 137
  2381. X    cmd : CWD check_login SP pathname . CRLF  (26)
  2382. X
  2383. X    CRLF  shift 166
  2384. X    .  error
  2385. X
  2386. X
  2387. Xstate 138
  2388. X    cmd : LIST check_login SP pathname . CRLF  (19)
  2389. X
  2390. X    CRLF  shift 167
  2391. X    .  error
  2392. X
  2393. X
  2394. Xstate 139
  2395. X    cmd : NLST check_login SP STRING . CRLF  (17)
  2396. X
  2397. X    CRLF  shift 168
  2398. X    .  error
  2399. X
  2400. X
  2401. Xstate 140
  2402. X    cmd : SITE SP HELP SP . STRING CRLF  (35)
  2403. X
  2404. X    STRING  shift 169
  2405. X    .  error
  2406. X
  2407. X
  2408. Xstate 141
  2409. X    cmd : SITE SP HELP CRLF .  (34)
  2410. X
  2411. X    .  reduce 34
  2412. X
  2413. X
  2414. Xstate 142
  2415. X    cmd : SITE SP UMASK check_login . CRLF  (36)
  2416. X    cmd : SITE SP UMASK check_login . SP octal_number CRLF  (37)
  2417. X
  2418. X    SP  shift 170
  2419. X    CRLF  shift 171
  2420. X    .  error
  2421. X
  2422. X
  2423. Xstate 143
  2424. X    cmd : SITE SP IDLE SP . NUMBER CRLF  (40)
  2425. X
  2426. X    NUMBER  shift 172
  2427. X    .  error
  2428. X
  2429. X
  2430. Xstate 144
  2431. X    cmd : SITE SP IDLE CRLF .  (39)
  2432. X
  2433. X    .  reduce 39
  2434. X
  2435. X
  2436. Xstate 145
  2437. X    cmd : SITE SP CHMOD check_login . SP octal_number SP pathname CRLF  (38)
  2438. X
  2439. X    SP  shift 173
  2440. X    .  error
  2441. X
  2442. X
  2443. Xstate 146
  2444. X    cmd : STAT check_login SP pathname . CRLF  (20)
  2445. X
  2446. X    CRLF  shift 174
  2447. X    .  error
  2448. X
  2449. X
  2450. Xstate 147
  2451. X    cmd : HELP SP STRING CRLF .  (28)
  2452. X
  2453. X    .  reduce 28
  2454. X
  2455. X
  2456. Xstate 148
  2457. X    cmd : MKD check_login SP pathname . CRLF  (30)
  2458. X
  2459. X    CRLF  shift 175
  2460. X    .  error
  2461. X
  2462. X
  2463. Xstate 149
  2464. X    cmd : RMD check_login SP pathname . CRLF  (31)
  2465. X
  2466. X    CRLF  shift 176
  2467. X    .  error
  2468. X
  2469. X
  2470. Xstate 150
  2471. X    cmd : STOU check_login SP pathname . CRLF  (41)
  2472. X
  2473. X    CRLF  shift 177
  2474. X    .  error
  2475. X
  2476. X
  2477. Xstate 151
  2478. X    cmd : SIZE check_login SP pathname . CRLF  (43)
  2479. X
  2480. X    CRLF  shift 178
  2481. X    .  error
  2482. X
  2483. X
  2484. Xstate 152
  2485. X    cmd : MDTM check_login SP pathname . CRLF  (44)
  2486. X
  2487. X    CRLF  shift 179
  2488. X    .  error
  2489. X
  2490. X
  2491. Xstate 153
  2492. X    host_port : NUMBER COMMA NUMBER . COMMA NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER  (52)
  2493. X
  2494. X    COMMA  shift 180
  2495. X    .  error
  2496. X
  2497. X
  2498. Xstate 154
  2499. X    form_code : C .  (55)
  2500. X
  2501. X    .  reduce 55
  2502. X
  2503. X
  2504. Xstate 155
  2505. X    form_code : N .  (53)
  2506. X
  2507. X    .  reduce 53
  2508. X
  2509. X
  2510. Xstate 156
  2511. X    form_code : T .  (54)
  2512. X
  2513. X    .  reduce 54
  2514. X
  2515. X
  2516. Xstate 157
  2517. X    type_code : A SP form_code .  (57)
  2518. X
  2519. X    .  reduce 57
  2520. X
  2521. X
  2522. Xstate 158
  2523. X    type_code : E SP form_code .  (59)
  2524. X
  2525. X    .  reduce 59
  2526. X
  2527. X
  2528. Xstate 159
  2529. X    type_code : L SP byte_size .  (62)
  2530. X
  2531. X    .  reduce 62
  2532. X
  2533. X
  2534. Xstate 160
  2535. X    cmd : RETR check_login SP pathname CRLF .  (13)
  2536. X
  2537. X    .  reduce 13
  2538. X
  2539. X
  2540. Xstate 161
  2541. X    cmd : STOR check_login SP pathname CRLF .  (14)
  2542. X
  2543. X    .  reduce 14
  2544. X
  2545. X
  2546. Xstate 162
  2547. X    cmd : APPE check_login SP pathname CRLF .  (15)
  2548. X
  2549. X    .  reduce 15
  2550. X
  2551. X
  2552. Xstate 163
  2553. X    cmd : ALLO SP NUMBER SP R . SP NUMBER CRLF  (12)
  2554. X
  2555. X    SP  shift 181
  2556. X    .  error
  2557. X
  2558. X
  2559. Xstate 164
  2560. X    rcmd : RNFR check_login SP pathname CRLF .  (47)
  2561. X
  2562. X    .  reduce 47
  2563. X
  2564. X
  2565. Xstate 165
  2566. X    cmd : DELE check_login SP pathname CRLF .  (22)
  2567. X
  2568. X    .  reduce 22
  2569. X
  2570. X
  2571. Xstate 166
  2572. X    cmd : CWD check_login SP pathname CRLF .  (26)
  2573. X
  2574. X    .  reduce 26
  2575. X
  2576. X
  2577. Xstate 167
  2578. X    cmd : LIST check_login SP pathname CRLF .  (19)
  2579. X
  2580. X    .  reduce 19
  2581. X
  2582. X
  2583. Xstate 168
  2584. X    cmd : NLST check_login SP STRING CRLF .  (17)
  2585. X
  2586. X    .  reduce 17
  2587. X
  2588. X
  2589. Xstate 169
  2590. X    cmd : SITE SP HELP SP STRING . CRLF  (35)
  2591. X
  2592. X    CRLF  shift 182
  2593. X    .  error
  2594. X
  2595. X
  2596. Xstate 170
  2597. X    cmd : SITE SP UMASK check_login SP . octal_number CRLF  (37)
  2598. X
  2599. X    NUMBER  shift 183
  2600. X    .  error
  2601. X
  2602. X    octal_number  goto 184
  2603. X
  2604. X
  2605. Xstate 171
  2606. X    cmd : SITE SP UMASK check_login CRLF .  (36)
  2607. X
  2608. X    .  reduce 36
  2609. X
  2610. X
  2611. Xstate 172
  2612. X    cmd : SITE SP IDLE SP NUMBER . CRLF  (40)
  2613. X
  2614. X    CRLF  shift 185
  2615. X    .  error
  2616. X
  2617. X
  2618. Xstate 173
  2619. X    cmd : SITE SP CHMOD check_login SP . octal_number SP pathname CRLF  (38)
  2620. X
  2621. X    NUMBER  shift 183
  2622. X    .  error
  2623. X
  2624. X    octal_number  goto 186
  2625. X
  2626. X
  2627. Xstate 174
  2628. X    cmd : STAT check_login SP pathname CRLF .  (20)
  2629. X
  2630. X    .  reduce 20
  2631. X
  2632. X
  2633. Xstate 175
  2634. X    cmd : MKD check_login SP pathname CRLF .  (30)
  2635. X
  2636. X    .  reduce 30
  2637. X
  2638. X
  2639. Xstate 176
  2640. X    cmd : RMD check_login SP pathname CRLF .  (31)
  2641. X
  2642. X    .  reduce 31
  2643. X
  2644. X
  2645. Xstate 177
  2646. X    cmd : STOU check_login SP pathname CRLF .  (41)
  2647. X
  2648. X    .  reduce 41
  2649. X
  2650. X
  2651. Xstate 178
  2652. X    cmd : SIZE check_login SP pathname CRLF .  (43)
  2653. X
  2654. X    .  reduce 43
  2655. X
  2656. X
  2657. Xstate 179
  2658. X    cmd : MDTM check_login SP pathname CRLF .  (44)
  2659. X
  2660. X    .  reduce 44
  2661. X
  2662. X
  2663. Xstate 180
  2664. X    host_port : NUMBER COMMA NUMBER COMMA . NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER  (52)
  2665. X
  2666. X    NUMBER  shift 187
  2667. X    .  error
  2668. X
  2669. X
  2670. Xstate 181
  2671. X    cmd : ALLO SP NUMBER SP R SP . NUMBER CRLF  (12)
  2672. X
  2673. X    NUMBER  shift 188
  2674. X    .  error
  2675. X
  2676. X
  2677. Xstate 182
  2678. X    cmd : SITE SP HELP SP STRING CRLF .  (35)
  2679. X
  2680. X    .  reduce 35
  2681. X
  2682. X
  2683. Xstate 183
  2684. X    octal_number : NUMBER .  (72)
  2685. X
  2686. X    .  reduce 72
  2687. X
  2688. X
  2689. Xstate 184
  2690. X    cmd : SITE SP UMASK check_login SP octal_number . CRLF  (37)
  2691. X
  2692. X    CRLF  shift 189
  2693. X    .  error
  2694. X
  2695. X
  2696. Xstate 185
  2697. X    cmd : SITE SP IDLE SP NUMBER CRLF .  (40)
  2698. X
  2699. X    .  reduce 40
  2700. X
  2701. X
  2702. Xstate 186
  2703. X    cmd : SITE SP CHMOD check_login SP octal_number . SP pathname CRLF  (38)
  2704. X
  2705. X    SP  shift 190
  2706. X    .  error
  2707. X
  2708. X
  2709. Xstate 187
  2710. X    host_port : NUMBER COMMA NUMBER COMMA NUMBER . COMMA NUMBER COMMA NUMBER COMMA NUMBER  (52)
  2711. X
  2712. X    COMMA  shift 191
  2713. X    .  error
  2714. X
  2715. X
  2716. Xstate 188
  2717. X    cmd : ALLO SP NUMBER SP R SP NUMBER . CRLF  (12)
  2718. X
  2719. X    CRLF  shift 192
  2720. X    .  error
  2721. X
  2722. X
  2723. Xstate 189
  2724. X    cmd : SITE SP UMASK check_login SP octal_number CRLF .  (37)
  2725. X
  2726. X    .  reduce 37
  2727. X
  2728. X
  2729. Xstate 190
  2730. X    cmd : SITE SP CHMOD check_login SP octal_number SP . pathname CRLF  (38)
  2731. X
  2732. X    STRING  shift 94
  2733. X    .  error
  2734. X
  2735. X    pathname  goto 193
  2736. X    pathstring  goto 96
  2737. X
  2738. X
  2739. Xstate 191
  2740. X    host_port : NUMBER COMMA NUMBER COMMA NUMBER COMMA . NUMBER COMMA NUMBER COMMA NUMBER  (52)
  2741. X
  2742. X    NUMBER  shift 194
  2743. X    .  error
  2744. X
  2745. X
  2746. Xstate 192
  2747. X    cmd : ALLO SP NUMBER SP R SP NUMBER CRLF .  (12)
  2748. X
  2749. X    .  reduce 12
  2750. X
  2751. X
  2752. Xstate 193
  2753. X    cmd : SITE SP CHMOD check_login SP octal_number SP pathname . CRLF  (38)
  2754. X
  2755. X    CRLF  shift 195
  2756. X    .  error
  2757. X
  2758. X
  2759. Xstate 194
  2760. X    host_port : NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER . COMMA NUMBER COMMA NUMBER  (52)
  2761. X
  2762. X    COMMA  shift 196
  2763. X    .  error
  2764. X
  2765. X
  2766. Xstate 195
  2767. X    cmd : SITE SP CHMOD check_login SP octal_number SP pathname CRLF .  (38)
  2768. X
  2769. X    .  reduce 38
  2770. X
  2771. X
  2772. Xstate 196
  2773. X    host_port : NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER COMMA . NUMBER COMMA NUMBER  (52)
  2774. X
  2775. X    NUMBER  shift 197
  2776. X    .  error
  2777. X
  2778. X
  2779. Xstate 197
  2780. X    host_port : NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER . COMMA NUMBER  (52)
  2781. X
  2782. X    COMMA  shift 198
  2783. X    .  error
  2784. X
  2785. X
  2786. Xstate 198
  2787. X    host_port : NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER COMMA . NUMBER  (52)
  2788. X
  2789. X    NUMBER  shift 199
  2790. X    .  error
  2791. X
  2792. X
  2793. Xstate 199
  2794. X    host_port : NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER COMMA NUMBER .  (52)
  2795. X
  2796. X    .  reduce 52
  2797. X
  2798. X
  2799. X65 terminals, 16 nonterminals
  2800. X74 grammar rules, 200 states
  2801. END_OF_FILE
  2802. if test 22197 -ne `wc -c <'test/ftp.output'`; then
  2803.     echo shar: \"'test/ftp.output'\" unpacked with wrong size!
  2804. fi
  2805. # end of 'test/ftp.output'
  2806. fi
  2807. echo shar: End of archive 3 \(of 5\).
  2808. cp /dev/null ark3isdone
  2809. MISSING=""
  2810. for I in 1 2 3 4 5 ; do
  2811.     if test ! -f ark${I}isdone ; then
  2812.     MISSING="${MISSING} ${I}"
  2813.     fi
  2814. done
  2815. if test "${MISSING}" = "" ; then
  2816.     echo You have unpacked all 5 archives.
  2817.     rm -f ark[1-9]isdone
  2818. else
  2819.     echo You still need to unpack the following archives:
  2820.     echo "        " ${MISSING}
  2821. fi
  2822. ##  End of shell archive.
  2823. exit 0
  2824.